怎么保护 Docker 容器
容器和构建文件配置
创建用户
确保已为您的容器创建了一个用户,并以该用户身份运行该容器(请勿以root用户身份运行容器)。
远程访问
不允许远程访问守护程序,并且如果绝对必须这样做,请使用证书保护该访问。
隔离用户名称空间
确保用户名称空间在Docker中是隔离的,因为它是默认与主机名称空间共享的,这一点尤其重要。在某些情况下,这可能会被滥用以获取特权升级,甚至逃脱容器。您可以通过编辑配置文件来隔离用户名称空间,如上一节“ Docker配置文件”所述。此处多余地提及这一点,以强调这样做的重要性。
Healthchecks
Healthcheck是一个功能强大的工具,可用于验证容器的完整性,并可在dockerfile中进行配置。您应该执行运行状况检查以确保容器正常运行。如果服务器启动,下面的示例运行状况检查将以0退出,如果服务器关闭则以1退出。
HEALTHCHECK CMD curl –fail http://localhost || exit 1
SELinux
如果您的主机操作系统支持SELinux,请创建或导入SELinux策略,并在启用SELinux的守护程序模式下启动Docker。
docker daemon –selinux-enable
然后,您可以使用安全选项启动Docker容器,如下所示:
docker run –interactive –tty –security-opt label=level:TopSecret centos /bin/bash
网络接口
默认情况下,Docker侦听每个网络接口。由于在大多数情况下,仅在一个接口上会产生流量,因此会过度增加攻击面。因此,启动
Docker容器时,您可以将容器端口绑定到主机上的特定接口,如下所示
docker运行–detach –publish 10.2.3.4:49153:80 nginx
缓存的映像版本
提取映像时,请确保本地缓存与存储库中的内容匹配。否则,您最终可能会提取包含漏洞的映像的过时缓存版本。
网络桥
默认网络模型docker0容易受到ARP欺骗和MAC泛洪攻击。为了解决这个问题,请按照您的说明创建用户定义的桥接网络,如下所示:https : //docs.docker.com/network/bridge/ 6
Docker套接字警告
切勿在容器内运行Docker套接字。这样做可以使该容器执行Docker命令,并因此与主机OS通信并对其进行控制。所以不要那样做。
企业配置
Docker Trust
使用Docker Trust工具来生成可用于验证图像的加密完整性的密钥。可以使用Docker信任密钥对带有私钥的Docker映像进行签名,可以使用公证服务器上的公钥来对其进行验证。有关更多信息,请访问https://docs.docker.com/engine/security/trust/content_trust/ 2。要专注于在企业引擎中启用Docker Trust,请跳至本节https://docs.docker.com/engine/security/trust/content_trust/#enabling-dct-within-the-docker-enterprise-engine
漏洞扫描
Docker Enterprise具有内置的漏洞扫描功能,其中包括下载CVE数据库以对Docker映像运行脱机漏洞扫描的选项。定期扫描图像会提醒您它们所存在的漏洞,从而有助于使其更加安全。在此处了解有关如何执行此操作的更多信息:https : //docs.docker.com/ee/dtr/user/manage-images/scan-images-for-vulnerabilities/ 19
UCP
与LDAP的集成通用控制平面可以与LDAP集成,以简化身份验证系统,避免不必要的冗余。在此处阅读有关此过程的更多信息:
1.保护Docker基础架构:定期更新您的Docker版本、保持容器清洁、配置API和网络、限制系统资源的使用、保持主机隔离、限制容器功能、过滤系统调用。
2.保护Docker镜像:使用信任的镜像、定期扫描镜像、支持最小的基本镜像
3.访问和身份验证管理:实施特权最小的用户、使用机密管理工具、限制直接访问容器文件、启用加密通讯。
Docker简介
Docker是一个Docker容器通过其轻量级的运行时环境共享底层操作系统,以托管支持DevOps环境的应用程序。作为Cloud-Native框架的关键元素,Docker为您的软件开发生命周期(SDLC)带来了许多好处。但是,这些好处并非没有风险。您可能会面临复杂性,特别是在保护Docker框架方面。非常成功的Linux开源项目。它在Linux操作系统下无需增加管理器即可虚拟化应用程序。该应用程序常被抽象地误认为是操作系统(具有Linux内核资源隔离功能的OS)的唯一的应用程序。换句话说,该Linux应用程序部署在Docker数据容器中,该容器能利用Linux OS 的所有功能并能隔离应用程序。
Docker容器具有移动性并且与虚拟机(VMs)相互隔离,且仅在虚拟机上进行部分操作。在深入研究Docker数据保护这个问题之前,弄清楚Docker镜像和Docker数据容器之间的差异是十分必要的。一个Docker镜像是包括一个或多个应用程序的操作系统。而Docker 容器(本文的重点)是独立于镜像之外的运行实例。
Docker数据容器保护机制目前十分简单,不像虚拟机数据保护机制那么复杂成熟。这种保护机制与VMware vSphere存储接口数据保护、Microsoft Hyper-V 卷影复制服务或内核VM快照API不同。这就使得Docker容器保护机制更具有挑战性。好消息是我们有几种方法来实现它。
保护 Docker 容器
1.保护Docker基础架构
容器是可以托管应用程序的虚拟单元。为此,容器可容纳:
- 代码二进制
- 配置文件
- 相关依赖
由于容器是云原生设置的基础,因此在整个容器生命周期中,保护它们免受潜在攻击媒介的侵害是至关重要的。保护这种框架的整体方法不仅是保护Docker容器,而且还保护其基础架构。
让我们分解保护基础设施安全的最佳方法,看看它是如何工作的。
定期更新您的Docker版本
首先,确保您的Docker版本是最新的。过时的版本容易受到安全攻击。新版本发布通常包含修补程序和错误修复程序,以解决旧版本的漏洞。
主机环境也是如此:确保支持的应用程序是最新的,并且没有已知的错误或安全漏洞。
保持容器清洁
扩展的容器环境扩大了攻击面,并且相对于精益设置而言,更容易发生安全漏洞。为避免这种情况,请将您的容器配置为仅包含使它们按预期运行的必要组件:
- 软体套件
- Library
- 配置文件
此外,应定期检查主机实例中是否有未使用的容器和基本映像,并丢弃那些未使用的容器和基本映像。
配置API和网络
Docker Engine使用HTTP API在网络上进行通信。配置不当的API带有黑客可以利用的安全漏洞。
为避免这种情况,请通过安全地配置API来保护您的容器,该API限制了容器的公开展示。一种方法是通过启用基于证书的身份验证来实施加密通信。
(获取有关保护Docker API的更多详细信息**。)
限制系统资源的使用
设置每个容器可以使用的基础结构资源比例的限制。这些基础结构资源包括:
- 中央处理器
- 内存
- 网络带宽
Docker使用控制组来限制不同进程之间的资源分配和分配。这种方法可以防止受损的容器消耗过多的资源,这些资源在发生安全漏洞时可能会中断服务的交付。
保持主机隔离
在不同的主机上运行具有不同安全性要求的容器。
通过不同的命名空间维持容器的隔离性可以保护关键数据免受全面攻击。这种方法还可以防止嘈杂的邻居在基于池的隔离上消耗过多的资源,从而影响其他容器的服务。
限制容器功能
默认情况下,Docker容器可以维护和获取运行其核心服务可能需要或不需要的其他特权。
最佳做法是,应将容器的权限限制为仅运行其应用程序所需的权限。为此,请使用以下命令删除Docker容器的所有特权:
复制
$ docker run --cap-drop ALL
然后,使用–cap-add标志向容器添加特定特权。这种方法限制了Docker容器获取不必要的特权,这些特权在安全漏洞期间会被利用。
过滤系统调用
应用系统调用过滤器,使您可以选择容器可以对Linux内核进行哪些调用。
这种方法启用了安全的计算模式,从而减少了可能的暴露点,从而避免了安全事故的发生,尤其是避免了对内核漏洞的利用。
2.保护Docker镜像
现在,让我们转向基础架构之外的安全最佳实践。Docker映像是用于创建容器和宿主应用程序的可执行代码模板。Docker映像由运行时库和根文件系统组成,从而使映像成为Docker容器最关键的基础之一。在保护Docker映像时,以下是一些最佳实践。
使用信任的镜像
仅从最新的且配置正确的可信来源获取Docker基本映像。
此外,通过启用Docker内容信任功能以过滤掉不安全的可疑来源,确保Docker映像已正确签名。
定期扫描镜像
维护可靠的Docker映像安全配置文件并定期扫描它们是否存在漏洞至关重要。在下载图像之前,除了进行初始扫描外,还请执行此操作,以确保可以安全使用。
使用常规图像扫描,您还可以通过以下方法最大程度地减少曝光:
- 审核关键文件和目录
- 使用最新的安全补丁更新它们
支持最小的基本镜像
避免在较小的通用Docker镜像上使用较大的通用Docker镜像,以最大程度地减少安全漏洞。这提供了两个有价值的结果:
- 减少攻击面
- 摆脱更容易受到黑客攻击的默认配置
3.访问和身份验证管理
Docker Security的最后一个类别涉及访问和身份验证。
通过访问控制保护Docker Daemon的安全通常被称为应用第一层安全性。如果没有保护Docker Daemon的安全,那么一切都会很脆弱:
- 基础操作
- 应用领域
- 业务职能
实施特权最小的用户
默认情况下,Docker容器中的进程具有root特权,这些特权授予它们对容器和主机的管理访问权限。这向容器和底层主机开放了黑客可能利用的安全漏洞。
为避免这些漏洞,请设置最低特权用户,该用户仅授予运行容器所需的特权。或者,限制运行时配置以禁止使用特权用户。
使用机密管理工具
切勿将机密存储在Dockerfile中,这可能会使访问Dockerfile的用户放错位置,滥用或损害整个框架的安全性。
标准的最佳做法是安全加密第三方工具(例如Hashicorp Vault)中的密钥机密。您可以将这种方法用于访问凭证以外的其他容器机密。
限制直接访问容器文件
临时容器需要一致的升级和错误修复。结果,这种容器文件在用户每次访问它们时都会被公开。
作为最佳实践,请在容器外部维护容器日志。这大大减少了容器文件的一致直接使用。它还使您的团队无需访问容器目录中的日志即可解决问题。
启用加密通讯
将Docker Daemon的访问权限限制为仅少数关键用户。此外,通过对一般用户强制执行仅SSH访问,来限制对容器文件的直接访问。
使用TLS证书来加密主机级通信。禁用未使用的端口并使默认端口仅公开供内部使用也很重要。
总结
保护Docker可以保护您的IT环境,IT环境中的安全性是您永远不应忽略的关键任务。
为了确保云原生框架的安全,第一步始终是考虑框架关键元素的漏洞。因此,组织应该维护一个强大的安全配置文件,该配置文件围绕容器及其底层基础结构进行。
尽管实施端到端安全性的方法可能有所不同,但目标始终是考虑脆弱点并采用减轻风险的最佳实践。